#include "literals.h"
#include <string.h>
#include <stdio.h>
#include <string>

long long parse_common(const char * text, int base)
{
 if (base==2)
    return parse_binary(text,strlen(text));
 std::string txt=text;
 for (unsigned int i=0;i<txt.size();i++)
   if (txt[i]=='_')
       txt.erase(txt.begin()+i);
 long long dd=22;
 //printf("Parsing %s with base %d\n",txt.c_str(),base);
 if (base==8) { sscanf(txt.c_str(),LLO,&dd);  }
 if (base==16) { sscanf(txt.c_str(),LLX,&dd);  }
 if (base==10) { sscanf(txt.c_str(),LL,&dd);   }
 return dd;
}


long long parse_binary(const char * text, int len)
{
 std::string txt=text;
 for (unsigned int i=0;i<txt.size();i++)
   if (txt[i]=='_')
       txt.erase(txt.begin()+i);
 int pos=0;
 long long res=0;
 len=txt.size();
 //printf("Parsing binary length: %d\n",len);
 for (pos=0;pos!=len;pos++)
 {
   //int bit=;
   //printf("Parsing %d bit(%c):  %d\n",pos,txt[pos],bit);
   res+=(txt[pos]-'0')<<(len-pos-1);
 }
 return res;
}

double parse_real(const char * text)
{
 double result=0;
 std::string f;
 while(*text)
 {
   if (*text!='_')
      f.push_back(*text);
   ++text;
 }
  sscanf(f.c_str(),"%lf",&(result));
  return result;
}
